<?php
class Validate {
	/**
	 * Validera en epostadress
	 *
	 * @param string $email Epostadressen som ska valideras
	 *
	 * @return bool Om epostadressen är giltig eller ej
	 */
	public static function validate_email($email) {
		if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
			return true;
		}

		return false;
	}

	/**
	 * Validera ett datum
	 *
	 * @param string $date Datumet som ska valideras
	 *
	 * @return string|bool Ett datum i formatet YYYY-MM-DD eller false om datumet inte är giltigt
	 */
	public static function validate_date($date) {
		/**
		 * Regexp för att matcha alla typer av datum som vi stödjer
		 *
		 * Första två siffrorna i året är ej obligatoriska
		 * Månader måste vara mellan 01-12 och ha en nolla i början om det är under 10 
		 * Dagar måste vara mellan 01-31 och ha en nolla i början om det är under 10
		 */
		preg_match('/((19|20)?[0-9]{2})-?(0-9]|1[012])-?(0[1-9]|[12][0-9]|3[01])/', $date, $matches);

		$year = (isset($matches[1]) ? $matches[1] : 0);
		$month = (isset($matches[3]) ? $matches[3] : 0);
		$day = (isset($matches[4]) ? $matches[4] : 0);

		// checkdate() kollar så att datumet stämmer, bla skottår
		if(checkdate($month, $day, $year)) {
			$format = '%02d-%02d-%02d';

			/**
			 * Sätt ihop datumet till vårt standardformat
			 * sprintf() tar bort inledande nollor så vi får lägga till det
			*/
			$full_date = sprintf($format, $year, $month, $day);

			// Låt PHP räkna ut vilket millennium det ska vara
			$year = date('Y', strtotime($full_date));

			return sprintf($format, $year, $month, $day);
		}

		return false;
	}

	/**
	 * Testa alla funktioner
	 *
	 * @return bool Om alla tester lyckades eller ej
	 */
	public static function test_all() {
		$success = true;

		if(!static::validate_email('jw222eu@student.lnu.se')) {
			echo 'Test 1 för validate_email misslyckades. <br>';

			$success = false;
		}

		if(!static::validate_email('jonathan@jwilsson.com')) {
			echo 'Test 2 för validate_email misslyckades. <br>';

			$success = false;
		}

		if(static::validate_email('jonathan')) {
			echo 'Test 3 för validate_email misslyckades. <br>';

			$success = false;
		}

		if(static::validate_email('jonathan@jwilsson')) {
			echo 'Test 4 för validate_email misslyckades. <br>';

			$success = false;
		}

		if(static::validate_email('jonathanjwilsson.com')) {
			echo 'Test 5 för validate_email misslyckades. <br>';

			$success = false;
		}

		if(static::validate_date('1999-10-01') != '1999-10-01') {
			echo 'Test 1 för validate_date misslyckades. <br>';

			$success = false;
		}

		if(static::validate_date('99-10-01') != '1999-10-01') {
			echo 'Test 2 för validate_date misslyckades. <br>';

			$success = false;
		}

		if(static::validate_date('991001') != '1999-10-01') {
			echo 'Test 3 för validate_date misslyckades. <br>';

			$success = false;
		}

		if(static::validate_date('2012-10-01') != '2012-10-01') {
			echo 'Test 4 för validate_date misslyckades. <br>';

			$success = false;
		}

		if(static::validate_date('2013-02-29')) {
			echo 'Test 5 för validate_date misslyckades. <br>';

			$success = false;
		}

		return $success;
	}
}

if(Validate::test_all()) {
	echo 'Alla test lyckades.';
}